Add UTM input to unicsv format options.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Mon, 6 Mar 2006 02:18:19 +0000 (02:18 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Mon, 6 Mar 2006 02:18:19 +0000 (02:18 +0000)
gpsbabel/readme.xml
gpsbabel/unicsv.c

index 820489301b8f0c08e96475c4c8555e5d85791a64..488e874964554e02caf9ed6b8188eb741ac1f794 100644 (file)
@@ -1552,8 +1552,8 @@ Hawaiian_mean"</para>
        </para>
        <para>
        The list of keywords include "lat", "lon", "desc", "name", 
-       "notes", "alt", and "url".   Fuller spellings (i.e. "longitude") may
-       be used.
+       "notes", "alt", "urm z", "utm n", "utm e", and "url".   
+       Fuller spellings (i.e. "longitude") may be used.
        </para>
        <para>
        A typical file may be:
index 26bbd0b1750c8059d0b819839c66b3d4e9f04630..ae9f9ea476b2d048ee62b85be387a39f0e184568 100644 (file)
@@ -37,6 +37,9 @@ struct {
        int notescol;
        int altcol;
        int urlcol;
+       int utmzcol; /* Zone */
+       int utmncol; /* Northing */
+       int utmecol; /* Easting */
 } unicsv_fieldpos;
 
 static double unicsv_altscale;
@@ -70,7 +73,7 @@ static void
 unicsv_fondle_header(char *ibuf)
 {
        char *s;
-       int i;
+       unsigned int i;
        int *ip = &unicsv_fieldpos.firstval;
 
        for (i = 0; i < sizeof(unicsv_fieldpos) / sizeof(int); i++, ip++) {
@@ -116,9 +119,18 @@ unicsv_fondle_header(char *ibuf)
                                unicsv_altscale = 0.3048;
                        }
                }
-               else if (UNICSV_IS("url")) {
+               else if (UNICSV_CONTAINS("url")) {
                        unicsv_fieldpos.urlcol = i;
                }
+               else if (UNICSV_CONTAINS("utm z")) {
+                       unicsv_fieldpos.utmzcol = i;
+               }
+               else if (UNICSV_CONTAINS("utm n")) {
+                       unicsv_fieldpos.utmncol = i;
+               }
+               else if (UNICSV_CONTAINS("utm e")) {
+                       unicsv_fieldpos.utmecol = i;
+               }
 /* todo: speed, course, hdop, sat, date, time, maybe a few others */
        }
 }
@@ -150,6 +162,9 @@ unicsv_parse_one_line(char *ibuf)
        char *s;
        waypoint *wpt;
        int i;
+       int  utmz = -9999;
+       double utme;
+       double utmn;
 
        s = csv_lineparse(ibuf, unicsv_fieldsep, "", 0);
        if (s == NULL) return;
@@ -178,6 +193,19 @@ unicsv_parse_one_line(char *ibuf)
                else if (i == unicsv_fieldpos.altcol) {
                        wpt->altitude = atof(s) * unicsv_altscale;
                }
+               else if (i == unicsv_fieldpos.utmzcol) {
+                       utmz = atoi(s);
+               }
+               else if (i == unicsv_fieldpos.utmecol) {
+                       utme = atof(s);
+               }
+               else if (i == unicsv_fieldpos.utmncol) {
+                       utmn = atof(s);
+               }
+       }
+       if (utmz  != -9999) {
+               GPS_Math_UTM_EN_To_WGS84(&wpt->latitude, &wpt->longitude,
+                       utme, utmn, utmz, 'N');
        }
        waypt_add(wpt);
 }